#include"BinaryTree.h"
#include<iostream>
 struct   TreeNode
    {
        TreeNode(const int&element):date(element)
        {
            Left=right=nullptr;
        }
        int date;//数据域
        TreeNode *Left;//左孩子
        TreeNode *right;//右孩子

    };
TreeNode *root=nullptr;


const int SIZE=100;
TreeNode *nodes[SIZE]={nullptr};
void SelectTwoMinNodes(int size, int& min1,int &min2)
{
    min1=min2=-1;
    for(int i=0;i<size;i++)
    {
        if(nodes[i]!nullptr)
        {
            if(min1==-1|| nodes[i]->date<nodes[min1]->date)
            {
                min2=min1;
                min1=i;
            }
            else if(min2==-1|| nodes[i]->date<nodes[min1]->date)
            {
                min2=i;
            }
        }
    }
}
void BulidHuffmanTree(int *a,int size)
{
    TreeNode *tree[SIZE]={nullptr};
    for(int i=0;i<size;i++)
    {
        tree[i]=new TreeNode(a[i])//把数组结点都变成树结点
    }
    for(int i=0;i<size;i++)
    {
        int min1,min2;//最小的两个结点
        SelectTwoMinNodes(size,min1,min2);
        TreeNode *newNode=new TreeNode(nodes[min1]->date+nodes[min2]->date);
        newNode->left=nodes[min1];
        newNode->right=nodes[min2];

        nodes[min1]=newNode;
        nodes[min2]=nullptr;
    }
    for(int i=0;i<size;i++)
    {
        if(nodes[i]!=nullptr)
        {
            root=nodes[i];
            break;
        }
    }
}

int main()
{
    BinaryTree t;
    int a[]={4,1,5,2,7,3};
    for(int i=0;i<6;i++)
    {
        t.Insert(a[i]);
    }
    t.show();
    t.Remove(4);
    t.Remove(5);
    t.Remove(1);
    t.show();


    
    return 0;








}